﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ClienteWinMGI.Logica;
using ComunesMGI.DataTypes;
using ReportesMGI;
using ComunesMGI.Enum;
using ComunesMGI.Mensajes;

namespace ClienteWinMGI.Presentacion
{
    public partial class ReporteIncidentesCerradosPeriodo : Form
    {
        private List<DataSistema> _sistemasDeCliente;
        private List<DataCliente> _clientes;

        public ReporteIncidentesCerradosPeriodo()
        {
            InitializeComponent();
            cargarClientes();
            clearValidator();
            hideLoader();
        }

        private void showLoader() 
        {
            picLoader.Visible = true;
        }
        private void hideLoader()
        {
            picLoader.Visible = false;
        }

        private void clearValidator()
        {
            imgValidator.Visible = false;
            lblValidator.Visible = false;
        }

        private void showValidator(string textoValidator)
        {
            imgValidator.Visible = true;
            lblValidator.Visible = true;
            lblValidator.Text = textoValidator;
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void cargarClientes()
        {
            List<DataCliente> _ldc;
            IClientes _il = LogicaFactory.getInstance().getIClientes();
            _ldc = _il.getClientes();
            foreach (DataCliente dc in _ldc)
            {
                cboCliente.Items.Add(dc.Nombre);
            }
            _clientes = _ldc;

            cboCliente.SelectedIndex = -1;
            cboSistema.Enabled = false;

        }
        private void cboCliente_SelectedIndexChanged(object sender, EventArgs e)
        {
            clearValidator();
            cboSistema.Items.Clear();
            DataCliente actualDc = _clientes.First(ds => ds.Nombre == cboCliente.SelectedItem.ToString());
            ISistemas _sist = LogicaFactory.getInstance().getISistemas();
            List<DataSistema> _lista = _sist.getSistemas(actualDc.Codigo);
            for (int i = 0; i < _lista.Count(); i++)
            {
                DataSistema _dataSist = _lista[i];
                //string item = " Nombre=" + _dataSist.Nombre + ";" + "Sitio=" + _dataSist.Sitio;
                string item = _dataSist.Nombre;
                cboSistema.Items.Add(item);
            }
            _sistemasDeCliente = _lista;
            cboSistema.SelectedIndex = -1;
            cboSistema.Enabled = true;
        }

        private void btnReporte_Click(object sender, EventArgs e)
        {
            showLoader();
            this.Refresh();
            this.Update();
            clearValidator();
            if (cboCliente.SelectedIndex != -1)
            {
                if (cboSistema.SelectedIndex != -1)
                {
                    DataCliente _datoCliente = new DataCliente(cboCliente.SelectedItem.ToString());
                    DataSistema _datoSistema = _sistemasDeCliente.First(ds => ds.Nombre == cboSistema.SelectedItem.ToString());

                    IIncidentes _inc = LogicaFactory.getInstance().getIIncidentes();

                    List<int> lds = new List<int>();
                    lds.Add(_datoSistema.Codigo);
                    List<DataIncidenteReporte> _licp = _inc.GetIncidentesCerradosPeriodo(lds, dTPFechaDesde.Value, dTPFechaHasta.Value);
                    if (_licp != null && _licp.Count > 0)
                    {
                        //FormReportes fr = new FormReportes(_licp, dTPFechaDesde.Value, dTPFechaHasta.Value);
                        FormReportes fr = new FormReportes();
                        fr.setReporteCerradosPeriodos();
                        fr.SetDataSourceReporte(_licp, dTPFechaDesde.Value, dTPFechaHasta.Value);
                        fr.ShowDialog();
  
                    }
                    else {
                        Error err = new Error("Error", "No existen incidentes cerrados para el periodo seleccionado.", "Modifique el periodo en el cual quiere visualizar los incidentes cerrados para poder generar el reporte.");
                        err.ShowDialog();
                    }
                }
                else 
                {
                    showValidator("El campo del sistema no puede ser vacío");
                }
            }
            else 
            {
                showValidator("El campo del cliente no puede ser vacío");
            }
            hideLoader();
        }

        private void cboSistema_SelectedIndexChanged(object sender, EventArgs e)
        {
            clearValidator();
        }
    }
}
